﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using BLL.Validation;
using Entities;
using DAL;
using DAL.IRepository;

namespace BLL
{
     
    public class ChiTietKeHoachGiangDayManager : IValidator<ChiTietKeHoachGiangDay>
    {
         
        private readonly IGeneralRepository<ChiTietKeHoachGiangDay> _repository;
       

        public ChiTietKeHoachGiangDayManager(IGeneralRepository<ChiTietKeHoachGiangDay> itr)
        {
            _repository = itr;
           

        }

        public ValidationResult Validate(ChiTietKeHoachGiangDay chitietKHGD)
        {
            var vResult = new ValidationResult();
            if (string.IsNullOrEmpty(chitietKHGD.MaKH.Trim()))
                vResult.Messages.Add("Mã kế hoạch phải khác chuỗi rỗng");

            //if (string.IsNullOrEmpty(chitietKHGD.SoTietLTDaDay.Trim()))
            //    vResult.Messages.Add("Số tiết phải lớn hơn hoặc bằng 0 và không được để trống");
            return vResult;
        }


        public ActionResult InsertOrUpdate(ChiTietKeHoachGiangDay chitietKHGD)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.InsertOrUpdate(chitietKHGD))
                    
                    aResult.Exceptions.Add(new Exception("Thêm mới chi tiết không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(ChiTietKeHoachGiangDay chitietKHGD)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(chitietKHGD))
                    aResult.Exceptions.Add(new Exception("Xóa chi tiết kế hoạch không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(string chitietKHGDId)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(t => t.MaMH == chitietKHGDId))
                    aResult.Exceptions.Add(new Exception("Xóa  chi tiết kế hoạch không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }
        public ActionResultAsList<ChiTietKeHoachGiangDay> Find(Expression<Func<ChiTietKeHoachGiangDay, bool>> predicate)
        {
            var aResult = new ActionResultAsList<ChiTietKeHoachGiangDay>();
            try
            {
                aResult.Result = _repository.Find(predicate).ToList();
                if (aResult.Result.Count == 0)
                    aResult.Exceptions.Add(new Exception("Không tìm thấy chi tiet ke hoach thỏa điều kiện"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }
                 

    }
}
